/*
 * Created on 24/06/2005
 *
 */
package com.master.bd.calculo_frete;

import java.sql.*;

import com.master.ed.*;
import com.master.root.*;
import com.master.util.*;
import com.master.util.bd.*;

/**
 *
 *
 */
public class Calcula_Frete_RodExp
    extends Calcula_Frete {

  public Calcula_Frete_RodExp (ExecutaSQL executasql) {
    super (executasql);
    // //  ("Calcula_Frete_RodExp 1");
  }

  public void calcula (Calcula_FreteED ed) throws Excecoes {

    // //  ("Calcula_Frete_Rodov01 VL_Nota_Fiscal=" + ed.getVL_Nota_Fiscal ());

    Localiza_Tabela = new Localiza_Tabela (this.executasql);

    Tabela_FreteBean tabelaFreteED = new Tabela_FreteBean ();

    ed.setLocalizado ("N");
    ed.setDM_Tem_Cidade ("S");
    ed.setDM_Tem_Peso ("N");
    ed.setDM_Tem_Modal ("S");
    ed.setDM_Tem_Validade ("N");
    ed.setDM_Tem_Vigencia ("N");
    ed.setDM_Tem_Empresa ("N");
    ed.setDM_Tem_Regiao_Estado ("N");
    ed.setDM_Tem_Estado ("S");
    ed.setDM_Tem_Subregiao ("S");
    ed.setDM_Tem_Regiao_Pais ("N");
    ed.setDM_Tem_Pais ("S");
    ed.setDM_Tabela_Reversa ("N");
    ed.setDM_Tem_Tabela_Unidade ("S");
    ed.setDM_Tem_Produto ("S");
    ed.setDM_Percurso_Busca("Origem_Destino");

    tabelaFreteED = Localiza_Tabela.escolheTabela (ed);

    if ("S".equals (tabelaFreteED.getDM_Localizado ())) {
      // //  ("achou tabela ");

      this.calculaFretePeso (tabelaFreteED , ed);
      this.calculaFreteValor (tabelaFreteED , ed);

      // //  ("calculou tudo ");
    }
  }

  protected void calculaFretePeso (Tabela_FreteBean tabelaFreteED , Calcula_FreteED ed) throws Excecoes {
    // --------------------FRETE PESO--------------------------------------------------
    Tipo_Movimento = "FP";
    VL_Movimento_Frete = 0;

    if (ed.getNR_Peso_Cubado () < 11) {
      VL_Movimento_Frete = tabelaFreteED.getVL_R_Ate10 ();
    }
    else if (ed.getNR_Peso_Cubado () < 21) {
      VL_Movimento_Frete = tabelaFreteED.getVL_R_Ate20 ();
    }
    else if (ed.getNR_Peso_Cubado () < 31) {
      VL_Movimento_Frete = tabelaFreteED.getVL_R_Ate30 ();
    }
    else if (ed.getNR_Peso_Cubado () < 51) {
      VL_Movimento_Frete = tabelaFreteED.getVL_R_Ate50 ();
    }
    else if (ed.getNR_Peso_Cubado () < 71) {
      VL_Movimento_Frete = tabelaFreteED.getVL_R_Ate70 ();
    }
    else if (ed.getNR_Peso_Cubado () < 101) {
      VL_Movimento_Frete = tabelaFreteED.getVL_R_Ate100 ();
    }
    else if (ed.getNR_Peso_Cubado () < 151) {
      VL_Movimento_Frete = tabelaFreteED.getVL_R_Ate150 ();
    }
    else if (ed.getNR_Peso_Cubado () < 201) {
      VL_Movimento_Frete = tabelaFreteED.getVL_R_Ate200 ();
    }

    if (VL_Movimento_Frete == 0.0 || ed.getNR_Peso_Cubado () > 200) {
      VL_Movimento_Frete = (tabelaFreteED.getVL_R_Ate200 () +
                            (tabelaFreteED.getVL_R_Acima200 () *
                             (ed.getNR_Peso_Cubado () - 200)));
    }

    if (VL_Movimento_Frete < tabelaFreteED.getVL_R_Ate10 ()) {
      VL_Movimento_Frete = tabelaFreteED.getVL_R_Ate10 ();
    }

    ed.setCD_Tipo_Movimento (Tipo_Movimento);
    ed.setOID_Tabela_Frete (String.valueOf (tabelaFreteED.getOID ()));
    ed.setVL_Movimento (VL_Movimento_Frete);
    this.incluiMovimento (ed);

  }

  protected void calculaFreteValor (Tabela_FreteBean tabelaFreteED , Calcula_FreteED ed) throws Excecoes {
    // --------------------AD VALOREM--------------------------------------------------
    Tipo_Movimento = "AV";
    VL_Movimento_Frete = 0;
    VL_Movimento_Frete = (ed.getVL_Nota_Fiscal () * tabelaFreteED.getPE_Ad_Valorem () / 100);

    ed.setCD_Tipo_Movimento (Tipo_Movimento);
    ed.setOID_Tabela_Frete (String.valueOf (tabelaFreteED.getOID ()));
    ed.setVL_Movimento (VL_Movimento_Frete);
    this.incluiMovimento (ed);

  }

}
